"""
https://www.bilibili.com/video/BV13HeczoEU1
古德斯坦序列是这样一个问题：
a1 = n （任意正整数）
重复：
    将 a[i-1] 以 i 进制表示
    将进位制上的指数也以 i 进制表示
    将所有的 i 替换为 i+1
    再将所得到的数字 -1
    所得数字为 ai，重复上述过程
直至：
    ai = 0

以 n=4 为例：
a1 = 1 * 2^(1 * 2^1)
a2 = 1 * 3^(1 * 3^1) - 1 = 2 * 3^(2 * 3^0) + 2 * 3^(1 * 3^0) + 2 * 3^(0 * 3^0)
a3 = 2 * 4^(2 * 4^0) + 2 * 4^(1 * 4^0) + 2 * 4^(0 * 4^0) - 1 = 2 * 4^(2 * 4^0) + 2 * 4^(1 * 4^0) + 1 * 4^(0 * 4^0)
a4 = 2 * 5^(2 * 5^0) + 2 * 5^(1 * 5^0) + 1 * 5^(0 * 5^0) - 1 = 2 * 5^(2 * 5^0) + 2 * 5^(1 * 5^0) + 0 * 5^(0 * 5^0)
a5 = 2 * 6^(2 * 6^0) + 2 * 6^(1 * 6^0) + 0 * 6^(0 * 6^0) - 1 = 2 * 6^(2 * 6^0) + 1 * 6^(1 * 6^0) + 5 * 6^(0 * 6^0)
a6 = 2 * 7^(2 * 7^0) + 1 * 7^(1 * 7^0) + 5 * 7^(0 * 7^0) - 1 = 2 * 7^(2 * 7^0) + 1 * 7^(1 * 7^0) + 4 * 7^(0 * 7^0)
a7 = 2 * 8^(2 * 8^0) + 1 * 8^(1 * 8^0) + 4 * 8^(0 * 8^0) - 1 = 2 * 8^(2 * 8^0) + 1 * 8^(1 * 8^0) + 3 * 8^(0 * 8^0)
a8 = 2 * 9^(2 * 9^0) + 1 * 9^(1 * 9^0) + 3 * 9^(0 * 9^0) - 1 = 2 * 9^(2 * 9^0) + 1 * 9^(1 * 9^0) + 2 * 9^(0 * 9^0)
a9 = 2 * 10^(2 * 10^0) + 1 * 10^(1 * 10^0) + 2 * 10^(0 * 10^0) - 1 = 2 * 10^(2 * 10^0) + 1 * 10^(1 * 10^0) + 1 * 10^(0 * 10^0)
a10 = 2 * 11^(2 * 11^0) + 1 * 11^(1 * 11^0) + 1 * 11^(0 * 11^0) - 1 = 2 * 11^(2 * 11^0) + 1 * 11^(1 * 11^0) + 0 * 11^(0 * 11^0)
a11 = 2 * 12^(2 * 12^0) + 1 * 12^(1 * 12^0) + 0 * 12^(0 * 12^0) - 1 = 2 * 12^(2 * 12^0) + 0 * 12^(1 * 12^0) + 11 * 12^(0 * 12^0)
提取上述过程的系数部分，我们可以这样表示：
a1 = \
a2 = 3(2, 2, 2)
a3 = 4(2, 2, 1)
a4 = 5(2, 2, 0)
a5 = 6(2, 1, 5)
a6 = 7(2, 1, 4)
a7 = 8(2, 1, 3)
a8 = 9(2, 1, 2)
a9 = 10(2, 1, 1)
a10 = 11(2, 1, 0)
a11 = 12(2, 0, 11)
可以看到，这是一个变进制进位系统
对于 n>4 的情况，其结果并不如上述讨论的这样简洁，但它满足康托尔范式，大体上来说就是这样：
a = c1 * x^b1 + c2 * x^b2 + c3 * x^b3 + c4 * x^b4 + ...
其中 b 也和 a 类似
b = c1 * x^e1 + c2 * x^e2 + c3 * x^e3 + c4 * x^e4 + ...
但是 e 就是一个单纯值了
不管怎么排，总之呢，性质和 n=4 的情况是类似的，就是 a = i(c1, c2, ..., cm)，且满足元组比大小的良序关系
然后这里简单显示一下 n=4 对应的数字如何计算（笑死，根本算不出来）
"""
import time


def main():
    a, b, c = 2, 2, 2
    i = 3
    while True:
        c -= 1
        if c < 0:
            b -= 1
            c += i
            if b < 0:
                a -= 1
                b += i
                if a < 0:
                    break
            print(i, (a, b, c))
        i += 1
        # time.sleep(0.001)


if __name__ == '__main__':
    main()


"""
5 (2, 1, 4)
10 (2, 0, 9)
20 (1, 19, 19)
40 (1, 18, 39)
80 (1, 17, 79)
160 (1, 16, 159)
320 (1, 15, 319)
640 (1, 14, 639)
1280 (1, 13, 1279)
2560 (1, 12, 2559)
5120 (1, 11, 5119)
10240 (1, 10, 10239)
20480 (1, 9, 20479)
40960 (1, 8, 40959)
81920 (1, 7, 81919)
163840 (1, 6, 163839)
327680 (1, 5, 327679)
655360 (1, 4, 655359)
1310720 (1, 3, 1310719)
2621440 (1, 2, 2621439)
5242880 (1, 1, 5242879)
10485760 (1, 0, 10485759)
20971520 (0, 20971519, 20971519)
41943040 (0, 20971518, 41943039)
83886080 (0, 20971517, 83886079)
"""
